package ProblemaOptimizacion;

import Base.Cromosoma;

public class CromosomaF4 extends Cromosoma{

	final static double min = 0;
	final static double max = Math.PI;
	int longitud;
	int n;
	
	public CromosomaF4(double tolerancia,int numGenes){
		super(tolerancia,numGenes);
		this.n = numGenes;
		crearGenes(min,max);
		this.longitud = getLongitud();
		super.setLongitud(longitud);
	}
	
	public CromosomaF4(double tolerancia,int numGenes,int longitud){
		super(tolerancia,numGenes);
		this.longitud = longitud;
		super.setLongitud(longitud);
		crearGenes();	
	}
	
	public void inicializacion(){
		for(int i=0;i<numGenes;i++){
			genes[i].inicializacion();
		}	
	}
	
	public boolean equals(Object c){
		return this == c;
	}
	
	public CromosomaF4 clone(){
		CromosomaF4 c = new CromosomaF4(super.getTolerancia(),super.getNumGenes(),super.getLongitud());
		for (int i=0;i<c.getNumGenes();i++)
			c.setGen(i, getGen(i).clone());
		c.setFenotipo(super.getFenotipo().clone());
		c.setF(super.getF());
		c.setfAdaptada(super.getfAdaptada());
		//c.setPuntuacion(super.getPuntuacion());
		//c.setPuntuacion_acu(super.getPuntuacion_acu());
		return c;
	}
	
	public String toStringCod(){
		double[] fenotipo = getFenotipo();
		String cadena = "(" + fenotipo[0];
		for(int i=1;i<n;i++){
			cadena = cadena + " , " + fenotipo[i];
		}
		return cadena + ")";
	}
	
	public boolean inicializarValores(){
		double[] fen = new double[n];
		for(int i=0;i<n;i++){
			fen[i] = getGen(i).bin_dec();
		}
		super.setFenotipo(fen);
		double f = Funcion.f4(fen,n);
		super.setF(f);
		return f<0;
	}
	
}
